package fi.uba.algocontrol.view;

import fi.uba.algocontrol.controller.AvionController;
import fi.uba.algocontrol.model.ObjetoPosicionableGenerico;
import fi.uba.algocontrol.model.Vector;
import fi.uba.algocontrol.model.aviones.Avion;
import fiuba.algo3.titiritero.dibujables.Imagen;
import fiuba.algo3.titiritero.modelo.ObjetoPosicionable;
import fiuba.algo3.titiritero.modelo.SuperficieDeDibujo;

import java.io.IOException;
import java.net.URL;

public class AvionView extends Imagen
{
    AvionController controller = null;

    private SeleccionAvionView seleccionAvionView;

    public AvionView(URL url, ObjetoPosicionable objetoPosicionable, AvionController avionController) throws IOException {
        super(url, objetoPosicionable);
        Avion avion = (Avion)objetoPosicionable;
        this.controller = avionController;
        this.seleccionAvionView = new SeleccionAvionView( new URL("file", "", "resources/images/selection.png"), new ObjetoPosicionableGenerico( avion.getX(), avion.getY() - avion.getRadioSprite().getAlto() / 2 ));
    }

    public void dibujar(SuperficieDeDibujo superficieDeDibujo)
    {
        Avion avion = (Avion)this.getPosicionable();

        if (avion.manipulado())
        {
            ((ObjetoPosicionableGenerico)this.seleccionAvionView.getPosicionable()).setX(avion.getX());
            ((ObjetoPosicionableGenerico)this.seleccionAvionView.getPosicionable()).setY(avion.getY() - avion.getRadioSprite().getAlto()/2);
            this.seleccionAvionView.dibujar(superficieDeDibujo);
        }
        if (avion.chocado())
        {
            try
            {
                (new Imagen(new URL("file", "", "resources/images/crash.png"), new ObjetoPosicionableGenerico(avion.getX(),avion.getY()))).dibujar(superficieDeDibujo);
            }catch(IOException e)
            {
                System.out.println(e.getMessage());
            }
        }
        super.dibujar(superficieDeDibujo);
    }

    public void meSeleccionaron(Vector punto)
    {
        Avion avion = (Avion) this.getPosicionable();
        if (punto.getX() < avion.getX() + avion.getRadioSprite().getAncho() &&
                punto.getX() > avion.getX() - avion.getRadioSprite().getAncho() )
        {
            if (punto.getY() < avion.getY() + avion.getRadioSprite().getAlto() &&
                    punto.getY() > avion.getY() - avion.getRadioSprite().getAlto() )
            {
                if (this.controller.getAvionSeleccionado() != null && this.controller.getAvionSeleccionado().manipulado())
                    this.controller.getAvionSeleccionado().soltar();

                avion.manipular();
                this.controller.seleccionarAvion(avion);
            }
        }
    }

}
